package com.cougil.uoc.seghismed.model.comunicacions.ciphed;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

import com.cougil.uoc.seghismed.model.ciphed.UsuariCiphed;

/**
 * Entitat de negoci que representa pròpiament una Petició d'una aplicació Client a
 * l'aplicació Gestora amb la seva informació xifrada
 * 
 * @author Ignacio Cougil Jares
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "PeticioCiphed", propOrder = { 
		"nomOperacioCiphed",
		"usuariOrigenCiphed",
		"usuariDestiCiphed",
		"niCiphed", 
		"ngCiphed"
})
public class PeticioCiphed {

	@XmlElement(name = "nomOperacioCiphed", required = true)
	private byte[] nomOperacioCiphed;
	
	@XmlElement(name = "usuariOrigenCiphed", required = true) 
	private UsuariCiphed usuariOrigenCiphed;
	  
	@XmlElement(name = "usuariDestiCiphed", required = true) 
	private UsuariCiphed usuariDestiCiphed;
	
	@XmlElement(name = "niCiphed")
	private byte[] niCiphed;
	
	@XmlElement(name = "ngCiphed")
	private byte[] ngCiphed;
	
	/**
	 * @return Retorna el valor de la propietat nomOperacioCiphed
	 */
	public byte[] getNomOperacioCiphed() {
		return nomOperacioCiphed;
	}
	/**
	 * @param operacio Estableix el valor de la propietat nomOperacioCiphed
	 */
	public void setNomOperacioCiphed(byte[] nomOperacioCiphed) {
		this.nomOperacioCiphed = nomOperacioCiphed;
	}
	/**
	 * @return Retorna el valor de la propietat usuariOrigenCiphed
	 */
	public UsuariCiphed getUsuariOrigenCiphed() {
		return usuariOrigenCiphed;
	}
	 /**
	 * @param usuariOrigenCiphed Estableix el valor de la propietat usuariOrigenCiphed
	 */
	public void setUsuariOrigenCiphed(UsuariCiphed usuariOrigenCiphed) {
		this.usuariOrigenCiphed = usuariOrigenCiphed;
	}
	/**
	 * @return Retorna el valor de la propietat usuariDestiCiphed
	 */
	public UsuariCiphed getUsuariDestiCiphed() {
		return usuariDestiCiphed;
	}
	/**
	 * @param usuariDestiCiphed Estableix el valor de la propietat usuariDestiCiphed
	 */
	public void setUsuariDestiCiphed(UsuariCiphed usuariDestiCiphed) {
		this.usuariDestiCiphed = usuariDestiCiphed;
	}
	/**
	 * @return Retorna el valor de la propietat niCiphed
	 */
	public byte[] getNiCiphed() {
		return niCiphed;
	}
	/**
	 * @param niCiphed Estableix el valor de la propietat niCiphed
	 */
	public void setNiCiphed(byte[] niCiphed) {
		this.niCiphed = niCiphed;
	}
	/**
	 * @return Retorna el valor de la propietat ngCiphed
	 */
	public byte[] getNgCiphed() {
		return ngCiphed;
	}
	/**
	 * @param ngCiphed Estableix el valor de la propietat ngCiphed
	 */
	public void setNgCiphed(byte[] ngCiphed) {
		this.ngCiphed = ngCiphed;
	}
	
	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(final Object other) {
		if (!(other instanceof PeticioCiphed))
			return false;
		PeticioCiphed castOther = (PeticioCiphed) other;
		return new EqualsBuilder()
			.append(nomOperacioCiphed, castOther.nomOperacioCiphed)
			.append(usuariOrigenCiphed, castOther.usuariOrigenCiphed)
		 	.append(usuariDestiCiphed, castOther.usuariDestiCiphed)
			.append(niCiphed, castOther.niCiphed)
			.append(ngCiphed, castOther.ngCiphed)
			.isEquals();
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		return new HashCodeBuilder()
			.append(nomOperacioCiphed)
			.append(usuariOrigenCiphed) 
			.append(usuariDestiCiphed) 
			.append(niCiphed)
			.append(ngCiphed)
			.toHashCode();
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
			.append("nomOperacioCiphed", nomOperacioCiphed)
			.append("usuariOrigenCiphed", usuariOrigenCiphed)
			.append("usuariDestiCiphed", usuariDestiCiphed) 
			.append("niCiphed", niCiphed)
			.append("ngCiphed", ngCiphed)
			.toString();
	}	
	
}
